/**
 * 电影下载处理器
 */

import BaseDownloadHandler from './BaseDownloadHandler.js'
import DownloadCore from './DownloadCore.js'
import ChatHistory from '../ChatHistory.js'

class MovieDownloadHandler extends BaseDownloadHandler {
  
  /**
   * 处理电影下载 - 重写基类方法，电影采用简单的复制链接方式
   * @param {Object} movie 电影对象
   */
  static handleDownload(movie) {
    console.log('点击电影:', movie)
    
    const movieName = this.getItemName(movie)
    
    uni.showModal({
      title: '下载电影',
      content: `是否要下载《${movieName}》？`,
      confirmText: '下载',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          this.copyToClipboard(movie.url, '电影下载链接已复制')
          
          // 记录到聊天历史
          ChatHistory.addMessage({
            type: 'system',
            content: `已复制电影《${movieName}》的下载链接`,
            sender: 'system',
            category: 'movie',
            data: movie
          })
        }
      }
    })
  }
  
  /**
   * 获取电影名称
   * @param {Object} movie 电影对象
   * @returns {string} 电影名称
   */
  static getItemName(movie) {
    if (movie.name && movie.name.trim() !== '') {
      return movie.name
    }
    
    if (movie.id) {
      return `电影 #${movie.id}`
    }
    
    try {
      const url = new URL(movie.url)
      const pathParts = url.pathname.split('/')
      const filename = pathParts[pathParts.length - 1]
      if (filename && filename !== '') {
        const nameWithoutExt = filename.split('.')[0]
        return nameWithoutExt || '未知电影'
      }
    } catch (e) {
      console.log('无法从 URL 提取电影名称')
    }
    
    return '未知电影'
  }
  
  /**
   * 获取电影类型
   * @param {Object} movie 电影对象
   * @returns {string} 电影类型
   */
  static getItemType(movie) {
    return movie.type ? movie.type.toLowerCase() : 'movie'
  }
  
  /**
   * 获取下载选项
   * @param {Object} movie 电影对象
   * @returns {Array} 下载选项列表
   */
  static getDownloadOptions(movie) {
    const options = []
    
    if (movie.url) {
      options.push({
        label: '下载链接',
        url: movie.url,
        type: '直接下载'
      })
    }
    
    return options
  }
  
  /**
   * 获取分类名称
   * @returns {string} 分类名称
   */
  static getCategory() {
    return '电影'
  }
  
  /**
   * 开始下载 - 电影暂时不支持APP内下载
   * @param {Object} movie 电影对象
   * @param {string} downloadUrl 下载链接
   * @param {string} targetDir 目标目录
   */
  static startDownload(movie, downloadUrl, targetDir) {
    // 电影目前主要是复制链接，如果未来需要支持直接下载，可以实现这个方法
    this.copyDownloadLink(movie, downloadUrl)
  }
}

export default MovieDownloadHandler